﻿// ------------------------------------------------------------------------
// 项目名称：Canroc.Net 
// 版权归属：Canroc（https://gitee.com/canroc）
//
// 许可证信息
// Canroc.Net项目主要遵循 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-APACHE 文件。
//
// 使用条款：
// 1.使用本项目应遵守相关法律法规和许可证的要求。
// 2.不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动。
// 3.任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任
//
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
//
// 其他重要信息
// Canroc.Net 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// ------------------------------------------------------------------------

namespace Canroc.Net.Core.Options;

/// <summary>
///     数据库配置
/// </summary>
[OptionsSettings("DbConnection")]
public class DbConnectionOption : IConfigurableOptions
{
    /// <summary>
    ///     连接配置
    /// </summary>
    public List<CanrocDbConfig> ConnectionConfigs { get; set; } = [];
}

/// <summary>
///     Canroc数据库配置
/// </summary>
public class CanrocDbConfig
{
    /// <summary>
    ///     Id
    /// </summary>
    public object ConfigId { get; set; } = "default";

    /// <summary>
    ///     数据库类型
    /// </summary>
    public string DbType { get; set; } = "SqlServer";

    /// <summary>
    ///     连接字符串
    /// </summary>
    public string ConnectionString { get; set; } = string.Empty;

    /// <summary>
    ///     初始化密钥类型
    /// </summary>
    public string InitKeyType { get; set; } = "Attribute";
    
    /// <summary>
    ///     是否自动关闭连接
    /// </summary>
    public bool IsAutoCloseConnection { get; set; }
    
    /// <summary>
    ///     打印sql
    /// </summary>
    public bool PrintSql { get; set; } = false;

    /// <summary>
    ///     打印错误sql
    /// </summary>
    public bool PrintErrorSql { get; set; } = true;

    /// <summary>
    ///     检查数据库
    /// </summary>
    public bool ValidateDatabase { get; set; } = true;
    
    /// <summary>
    ///     更多配置
    /// </summary>
    public ConnMoreSettings MoreSettings { get; set; } = new ();
}

/// <summary>
///     数据库更多配置
/// </summary>
public class ConnMoreSettings
{
    /// <summary>
    ///     是否自动删除数据缓存
    /// </summary>
    public bool IsAutoRemoveDataCache { get; set; }

    /// <summary>
    ///     SqlServer 优先使用 nvarchar
    /// </summary>
    public bool SqlServerCodeFirstNvarchar { get; set; }

    /// <summary>
    ///     是否自动更新查询筛选器
    /// </summary>
    public bool IsAutoUpdateQueryFilter { get; set; }

    /// <summary>
    ///     是否自动删除查询筛选器
    /// </summary>
    public bool IsAutoDeleteQueryFilter { get; set; }
}